# -*- coding: utf-8 -*-
# 如果你的程序（包括注释）中包含中文，请加上上面这一行，用于指明编码（utf-8）。
# #号开头的行都是注释。

# 如何编辑本程序：
#     用任何文本编辑器均可编辑。

# 如何运行本程序：
#     在终端中，运行：python p201_list.py

# 构造空列表：

persons = list()  # 空列表。
persons = [] # 空列表。

# 构造列表：

# 方法1：
persons = ['Alice', 'Bob', 'Charlie', 'David'] # 包含4个元素的列表。
# 注：列表中的元素不一定是同一类型，这样也可以：person=['Alice', 24, 80.5]
print('初始列表：')
print(persons)

# 方法2：
# 将区间转化为列表：
num_list = list(range(1,10))
print(num_list)

# 方法3：用listcomp方式构造列表：
squares = [ value**2 for value in range(0,10) ]
print(squares)


# 获取列表长度。
print(len(persons))


# 列表元素的索引：

# 索引从0开始。
print('第一个元素：')
print(persons[0])
# 倒数第一个。
print('倒数第一个元素：')
print(persons[-1])


# 修改列表
print('将第三个元素改为Cindy：')
persons[2] = 'Cindy'
print(persons)

# 添加元素。
print('末尾添加Edward：')
persons.append('Edward')  # 加到末尾。
print(persons)
print('首部加上Ada：')
persons.insert(0, 'Ada')  # 加到第一个之前。
print(persons)

# 删除元素。
# 知道索引，删除后不再访问。
print('删除第二个元素：')
del persons[1]
print(persons)
# 删除并访问被删除的元素。
print('删除最后一个和第一个元素：')
popped_person = persons.pop()
popped_person = persons.pop(0)
print(persons)
# 根据值删除元素。
print('删除Bob：')
persons.remove('Bob')  # 删除第一个Bob，如果有多个的话，后面的不会被删掉。
print(persons)


# 排序：

persons = ['Charlie', 'Bob', 'Alice', 'David'] 
# 临时排序，原列表不变，返回一个排序后的新列表。
sorted_persons = sorted(persons)
# 永久排序，原列表被修改。
persons.sort()


# 遍历列表：第一种方法：
for p in persons:
    print(p)
# for语句用于循环，注意for语句最后的：，和print之前的缩进。

# 遍历列表：第二种方法：
for i in range(0, len(persons)):
    print(persons[i])


# 列表的切片，切片的结果还是列表类型。
print(squares[0:3])
print(squares[:3])
print(squares[3:])

# 列表的拷贝。
new_list = squares[:]
# 注意它与 new_list = squares 的区别！

